#include <iostream>
#include <signal.h>
#include <unistd.h>
using namespace std;

void handler(int signo)
{
    cout << "get a signo: " << signo << endl;
}
int main()
{
    //试着屏蔽所有的信号
    // sigset_t set;
    // sigset_t oldset;
    // sigemptyset(&set);
    // for(int signo = 1; signo <= 31; signo++)
    // {
    //     sigaddset(&set, signo);
    // }
    // sigprocmask(SIG_SETMASK, &set, &oldset);
    // sigset_t pend;
    // while(true)
    // {
    //     sigpending(&pend);
    //     for(int signo = 31; signo >= 1; signo--)
    //     {
    //         if(sigismember(&pend, signo))
    //         {
    //             cout << "1";
    //         }
    //         else 
    //         {
    //             cout << "0";
    //         }
    //     }
    // }

    signal(2, handler);
    //1.把2号信号屏蔽掉
    //1.1预备工作
    sigset_t set, oldset;
    sigemptyset(&set);
    sigemptyset(&oldset);
    sigaddset(&set, 2);
    //1.2
    sigprocmask(SIG_SETMASK, &set, &oldset);

    //2.循环把pending表打印出来
    sigset_t pend;
    int cnt = 0;
    while(true)
    {
        sigpending(&pend);
        for(int signo = 31; signo >= 1; signo--)
        {
            if(sigismember(&pend, signo))
            {
                cout << "1";
            }
            else 
            {
                cout << "0";
            }
        }
        cout << "\n\n";
        sleep(1);

        //解除屏蔽
        cnt++;
        if(cnt == 8)
        {
            cout << "ublok signal" << endl;
            sigprocmask(SIG_SETMASK, &oldset, nullptr);
        }
    }
    //3.发送2号信号
    return 0;
}